﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows.Forms;
using Domain.Repository;
using Domain;
using MAF.Common;
using System.IO;

namespace WinFormUI
{
    static class Program
    {
        /// <summary>
        /// 应用程序的主入口点。
        /// </summary>
        [STAThread]
        static void Main()
        {
            //NotepadConfig.SetStorage(Storage.Notes);
            NotepadConfig.SetStorage(Storage.JsonNotes);

            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new MainForm());
        }
    }

    /// <summary>
    /// 基础设施配置类。
    /// </summary>
    /// <remarks>
    /// 使用说明：
    ///     此类默认提供了比较弱的基础设施功能，例如：数据都保存在内存中，不能持久化。
    ///      UI层可以重写本类来改变存储，记录日志方式等。
    /// </remarks>
    public class InfrastructureConfig
    {
        // 获取当前配置文件路径
        private static string _confPath = null;

        /// <summary>
        /// 静态构造方法
        /// </summary>
        static InfrastructureConfig()
        {
            _confPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "domainx.config");
            CreateDefaultConfigFile();
        }


        /// <summary>
        /// 创建存储类。默认使用内存存储，持久化的存储类在基础设施层实现。
        /// </summary>
        /// <returns></returns>
        public static IRepository<Note> CreateNotesStorage()
        {
            var confs = GetConfigContent();
            if (confs.Contains("Repostory=Text"))
                return null;

            return new MemRepo<Note>();
        }

        #region 创建读取配置文件

        /// <summary>
        /// 创建默认配置文件
        /// </summary>
        private static void CreateDefaultConfigFile()
        {
            // 检测配置文件是否已存在,如果存在，返回
            if (File.Exists(_confPath))
                return;

            // 创建配置文件
            File.WriteAllText(_confPath, DefaultConfigContent());
        }

        /// <summary>
        /// 默认配置文件内容
        /// </summary>
        /// <returns></returns>
        private static string DefaultConfigContent()
        {
            //return "Repostory=Text";
            //return "Repostory=SQLite";
            return "Repostory=Memory";
            //return "Repostory=MySql";
            //return "Repostory=SqlServer";
        }

        /// <summary>
        /// 读取配置文件
        /// </summary>
        private static string[] GetConfigContent()
        {
            return File.ReadAllLines(_confPath);
        }

        #endregion
    }
}
